package com.shlh.saas.task;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.shlh.saas.entity.EmailSendRecord;
import com.shlh.saas.mapper.EmailSendRecordMapper;
import com.shlh.saas.service.EmailService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 邮件定时任务
 * 负责扫描和处理待发送的邮件
 */
@Component
public class EmailScheduledTask {

    private static final Logger log = LoggerFactory.getLogger(EmailScheduledTask.class);

    @Autowired
    private EmailSendRecordMapper emailSendRecordMapper;

    @Autowired
    private EmailService emailService;

    /**
     * 定时扫描待发送邮件
     * 每1分钟执行一次
     */
//    @Scheduled(fixedRate = 60000)
//    public void scanPendingEmails() {
//        log.info("开始扫描待发送邮件...");
//
//        try {
//            // 查询状态为"发送中"的邮件记录
//            QueryWrapper<EmailSendRecord> queryWrapper = new QueryWrapper<>();
//            queryWrapper.eq("status", 0)
//                        .eq("is_deleted", 0)
//                        .isNotNull("scheduled_time")  // 确保有计划发送时间
//                        .le("scheduled_time", LocalDateTime.now()); // 计划发送时间小于等于当前时间
//
//            List<EmailSendRecord> pendingEmails = emailSendRecordMapper.selectList(queryWrapper);
//
//            if (pendingEmails.isEmpty()) {
//                log.info("没有待发送的邮件");
//                return;
//            }
//
//            log.info("发现{}条待发送邮件", pendingEmails.size());
//
//            // 处理每条待发送邮件
//            for (EmailSendRecord email : pendingEmails) {
//                try {
//                    // 调用邮件服务发送邮件
//                    boolean success = emailService.sendHtmlEmail(
//                        email.getRecipients(),
//                        email.getSubject(),
//                        email.getContent(),
//                        email.getUserId(),
//                        email.getPhone()
//                    );
//
//                    // 更新邮件状态
//                    email.setStatus(success ? 1 : 2); // 1-已发送, 2-发送失败
//                    email.setSendTime(LocalDateTime.now());
//
//                    // 如果发送成功，更新送达数量
//                    if (success) {
//                        String[] recipients = email.getRecipients().split(";");
//                        email.setDeliveryCount(recipients.length);
//                    }
//
//                    emailSendRecordMapper.updateById(email);
//
//                    log.info("邮件ID:{} 处理完成，状态:{}", email.getId(), email.getStatus());
//                } catch (Exception e) {
//                    log.error("处理邮件ID:{}时出错: {}", email.getId(), e.getMessage(), e);
//
//                    // 更新邮件状态为发送失败
//                    email.setStatus(2);
//                    emailSendRecordMapper.updateById(email);
//                }
//            }
//
//            log.info("邮件扫描处理完成");
//        } catch (Exception e) {
//            log.error("扫描待发送邮件时出错: {}", e.getMessage(), e);
//        }
//    }
} 